sztucznainteligencjafandomcom_pl-20200213-history
Budowa i dziatanie pojedynczego neuronu
Podstawowym elementem systemu nerwowego jest komórka nerwowa nazywana neuronem. Na rysunku 6.1 pokazany jest jej uproszczony schemat. W neuronie możemy wyróżnić ciało komórki (nazywane somą) oraz otaczające je dwa rodzaje wypustek: wypustki wprowadzające informację do neuronu, tzw. dendryty i wypustkę wyprowadzającą informacje z neuronu, tzw. akson. Każdy neuron ma dokładnie jedną wypustkę wyprowadzającą, poprzez którą może wysyłać impulsy do wielu innych neuronów. Pojedynczy neuron przyjmuje pobudzenie od ogromnej liczby neuronów dochodzącej do tysiąca. Jak wspomnieliśmy wcześniej, w mózgu człowieka jest ok. KM) miliardów neuronów, które oddziałują na siebie poprzez ogromną liczbę połączeń. Jeden neuron przekazuje pobudzenie innym neuronom przez złącza nerwowe nazywane synapsami. przy czym transmisja sygnałów odbywa się na drodze skomplikowanych procesów chemiczno-elektrycznych. Synapsy pełnią funkcję przekaźników informacji, a w wyniku ich działania pobudzenie może być wzmocnione lub osłabione. W rezultacie do neuronu dochodzą sygnały, z których część wywiera wpływ pobudzający, a część hamujący. Neuron sumuje impulsy pobudzające i hamujące. Jeżeli ich suma algebraiczna przekracza pewną wartość progową, to sygnał na wyjściu neuronu jest przesyłany — poprzez akson — do innych neuronów. Rys. 6.1. Uproszczony schemat neuronu i jego połączenia z sąsiednim neuronem: 1 — ciało komórki. 2 — akson, 3 — dendryty. 4 — synapsy Przedstawimy teraz model neuronu nawiązujący do pierwszych prób sformalizowania opisu działania komórki nerwowej. Wprowadźmy następujące oznaczenia: n — liczba wejść w neuronie, xi,...txn — sygnały wejściowe, x = |jcj ,..., xn]T, Wq, ..., wn — wagi synaptyczne, w = w„r, y — wartość wyjściowa neuronu, wq — wartość progowa, f — funkcja aktywacji. Formuła opisująca działanie neuronu wyraża się zależnością y = f(s). (6.1) w której ::::: n :::: s = ^ Xj Wj. (6.2) 1=0 Wzory (6.1) i (6.2) opisują neuron przedstawiony na rysunku 6.2. Funkcja aktywacji / może przybierać różną postać w zależności od konkretnego modelu neuronu. Jak wynika z powyższych wzorów, działanie neuronu jest bardzo proste. Najpierw sygnały wejściowe .vo, Aj,..., x„ zostają pomnożone przez odpowiadające im wagi u><), __ w„. Otrzymane w ten sposób wartości należy następnie zsumować. W wyniku powstaje sygnał s odzwierciedlający działanie części liniowej neuronu. Sygnał ten jest poddawany działaniu funkcji aktywacji, najczęściej nieliniowej. Zakładamy, że wartość sygnału .X'o jest równa 1, natomiast wagę wq nazywa się progiem (ang. bias). Gdzie zatem kryje się wiedza w tak opisanym neuronie? Otóż wiedza zapisana jest właśnie w wagach. Największym zaś fenomenem jest to, iż w łatwy sposób (za pomocą algorytmów opisanych w dalszej części rozdziału) można neurony uczyć, a więc odpowiednio dobierać wagi. Na rysunku 6.2 przedstawiliśmy ogólny schemat neuronu, jednakże w sieciach stosuje się różne jego modele. Niektóre z nich omówimy w następnych punktach. Należy jeszcze wspomnieć, iż podobnie jak w mózgu komórki nerwowe łączą się ze sobą. tak i w przypadku tworzenia modeli matematycznych sztuczne neurony przedstawione na rysunku 6.2 łączy się ze sobą, tworząc wielowarstwowe sieci neuronowe. Sposób łączenia neuronów, a także metody uczenia powstałych w ten sposób struktur poznamy w kolejnych punktach tego rozdziału. 6.2.2. Perceptron Na rysunku 6.3 przedstawiono schemat perceptronu. ::::: <0=1 Działanie perceptronu można opisać zależnością :::: n y = f(J2WiXi+0)- /=i Zauważmy, że wzór (6.3) koresponduje z ogólnym zapisem (6.1), jeżeli 0 = wq. Funkcja / może być nieciągłą funkcją skokową — bipolarną (przyjmuje wartości -1 lub 1) lub unipolarną (przyjmuje wartości 0 lub I). Do dalszych rozważań przyjmiemy, iż funkcja aktywacji jest bipolarna 1. gdy 5 > 0. -1, gdy s < 0. Perceptron ze względu na swą funkcję aktywacji przyjmuje tylko dwie różne wartości wyjściowe, może więc klasyfikować sygnały podane na jego wejście w postaci wektorów x = ,..., a„r do jednej z dwóch klas. Na przykład perceptron z jednym wejściem może oceniać, czy sygnał wejściowy jest dodatni, czy ujemny. W przypadku dwóch wejść x\ i x2 perceptron dzieli płaszczyznę na dwie części. Podział ten wyznacza prosta o równaniu :::: w\X\ + w2x 2 + 0 = 0. (6.5) Zatem równanie (6.5) można napisać :::: w i 9 x2 =------------ -vi----------- . W2 XV 2 W ogólnym przypadku, gdy perceptron ma n wejść, wówczas dzieli n-wymiarową przestrzeń wektorów wejściowych x na dwie pólprzestrzenie. Są one rozdzielone n — 1-wymiarową hiperpłaszczyzną, nazywaną granicą decyzyjną, daną wzorem :::: 'i Y^ *i + 0 = 0. i=l Na rysunku 6.4 przedstawiono granicę decyzyjną dla n = 2. Należy zauważyć, że prosta wyznaczająca podział przestrzeni jest zawsze prostopadła do wektora wag W = , wT. :::: Rys. 6.4. Granica decyzyjna dla n = 2 Zgodnie z tym, co napisaliśmy we wstępie, perceptron można uczyć. W czasie tego procesu jego wagi są modyfikowane. Metoda uczenia perceptronu należy do grupy algorytmów zwanych uczeniem z nauczycielem lub uczeniem nadzorowanym. Uczenie tego typu polega na tym. iż podaje się na wejście perceptronu sygnały \{t) = [*o(/).*i(0 x„(t)Yy t = 1.2 dla których znamy prawidłowe wartości sygnałów wyjściowych d(t), t = 1,2,..., zwanych sygnałami wzorcowymi. Zbiór takich próbek wejściowych wraz z odpowiadającymi im wartościami sygnałów wzorcowych nazywamy ciągiem uczącym. W metodach tych po podaniu wartości wejściowych oblicza się sygnał wyjściowy neuronu. Następnie modyfikuje się wagi w ten sposób, aby minimalizować błąd między sygnałem wzorcowym a wyjściem perceptronu. Stąd właśnie nazwa „uczenie z nauczycielem", ponieważ nauczyciel określa, jaka powinna być wartość wzorcowa. Oczywiście można się domyślać, iż istnieją algorytmy uczące sieci bez nauczyciela, ale o nich napiszemy w następnych punktach tego rozdziału. Algorytm uczenia perceptronu przedstawia się następująco: 1. Wybieramy w sposób losowy wagi początkowe perceptronu. 2. Na wejścia neuronu podajemy wektor uczący x. przy czym x = x(0 = [*o(/), jfi(/),...,*»(f)r,/= 1.2 3. Obliczamy wartość wyjściową perceptronu y, zgodnie ze wzorem (6.3). 4. Porównujemy wartość wyjściową y® z wartością wzorcową d = d(x(t)) znajdującą się w ciągu uczącym. 5. Dokonujemy modyfikacji wag według zależności: a) jeżeli y(x(/)) ^ d(x(f)), to w,(t + 1) = Wi{t) + d(x(/))*,(/); b) jeżeli y(x(0) = ć/(x(/)), to u?r-(/ + l)=u;,-(0> czyli wagi pozostają bez zmian. 6. Wracamy do punktu 2. Algorytm powtarza się tak długo, aż dla wszystkich wektorów wejściowych wchodzących w skład ciągu uczącego błąd na wyjściu będzie mniejszy od założonej tolerancji. Na rysunku 6.5 przedstawiono schemat blokowy uczenia perceptronu. Działanie pętli wewnętrznej na tym rysunku dotyczy tzw. jednej epoki, na którą składają się dane tworzące ciąg uczący. Działanie pętli zewnętrznej odzwierciedla możliwość wielokrotnego stosowania tego samego ciągu uczącego, aż zostanie spełniony warunek zatrzymania algorytmu. Wykażemy, iż algorytm uczenia perceptronu jest zbieżny. Twierdzenie o zbieżności algorytmu uczenia perceptronu formułuje się następująco: Jeżeli istnieje zestaw wag w* = .......... w*]T klasyfikujący wzorce uczące x = 1*1,..., .v„ l7 poprawnie, tzn. wyznaczający odwzorowanie y = d{x), to algorytm uczący znajdzie rozwiązanie w skończonej liczbie iteracji dla dowolnych wartości początkowych wektora wag >v. Zakładamy, że dane uczące reprezentują klasy liniowo separowane, gdyż tylko wtedy można nauczyć perceptron. Pokażemy, że istnieje skończona liczba kroków modyfikacji wag, po których perceptron będzie realizował odwzorowanie y = d(x). Ze względu na to, że funkcja aktywacji w perceptronie jest typu sgn, długość wektora w* możemy przyjąć dowolną, np. równą 1, tzn. ||w*|| = 1. Zatem w czasie uczenia wektor w I Losowy dobór wag perceptronu £ i = I |} wystarczy modyfikować tak. aby pokazany na rysunku 6.6 kąt a był równy 0. Oczywiście wtedy cos(a) = 1. Z faktu, że |w# o x| > 0 (znak o w tym przypadku oznacza iloczyn skalarny wektorów) i w* jest rozwiązaniem, wynika istnienie takiej stałej 8 > 0. dla której jw" ox| > <5 dla wszystkich wektorów x z ciągu uczącego. Z definicji iloczynu skalar ncgo wynika, że ::::: w* o w cos (a) = =. (6.8) yi|w*|2||w|p Ponieważ = i. (6.9) więc ::::: w* o w cos(of) = —-——. (6.10) II w || Zgodnie z algorytmem uczenia perceptronu, wagi modyfikowane są dla podanego wektora wejściowego x według następującej zależności: w' = w + Aw. gdzie Aw = d(x)x. Oczywiście zakładamy, że na wyjściu sieci pojawił się błąd i korekcja wag jest niezbędna. Zauważmy, że ::: w' o w* = w o w* + d(x)w* o x (6.11) = w o w* + sgn(w o x)w* o x. (6.12) Zachodzą następujące fakty: (i) Jeżeli w*ox < 0. to sgn(w*ox) = -1. więc sgn(w*ox)w*ox = — l(w*ox) > 0, (ii) Jeżeli w* o x > 0. to sgn(w* o x) = 1. więc sgn(w* o x)w* o x = 1 (w* o x) > 0. Zatem ::: sgn(w* o x)w* o x = |w*ox|. (6.13) Zgodnie ze wzorami (6.12) i (6.13) możemy napisać w' O W* = w O w* + | w* O XI. (6.14) Wiemy też, że |w* o x| > 8, stąd ::: w'ow*>wow * + 8. (6.15) Oszacujmy teraz wartość ||w'||2, pamiętając jednocześnie, iż rozpatrujemy przypadek, kiedy po podaniu na wejście wektora uczącego x na wyjściu sieci pojawia się błąd. tzn. d(x) — —sgn(w o x). (6.16) Oczywiście l|w'||2 = ||w + 2 = ||w||2 + 2d(x)w o x + ||x||2. (6.17) Wykorzystując zależności (6.16) i (6.17) oraz zakładając ograniczoność sygnałów wejściowych. mamy ::: IIw'II2 < l|w||2 +||x||2 = ||w||2 + C. (6.18) Po / krokach mcxlyfikacji wag sieci zależności (6.15) oraz (6.18) przybierają postać w(0 o w* > w o wx + tS (6.19) oraz ||w(/)||2 < ||w||2 + tC. (6.20) Korzystając ze wzorów (6.10), (6.19) i (6.20), otrzymujemy w* o w® w" o w + tS cos a(t) = — > ; (6.21) IIw (011 y||w||2 + /C Dlatego też musi istnieć takie t = /max, dla którego cos(a) = 1. A więc istnieje skończona liczba kroków modyfikacji wag, po których wektor wag początkowych będzie realizował odwzorowanie y = d(x). Jeżeli przyjmiemy, że wartości startowe wag są równe 0. to ::::: C 'max = (6.22) Przykład 6.1 Przedstawimy teraz przykład uczenia perceptronu. Omawiając jego działanie, stwierdziliśmy, iż ten model neuronu o dwóch wejściach dzieli płaszczyznę na dwie części (por. (6.5)). Wobec tego. jeżeli na płaszczyźnie umieścimy dwie klasy próbek, które będzie można rozdzielić za pomocą prostej, to perceptron w procesie uczenia będzie w stanie znaleźć tę linię podziału. W naszym doświadczeniu wykreślimy prostą wzorcową, oznaczoną literą L na rysunku 6.7. Przyjmiemy, że wszystkie punkty płaszczyzny leżące nad tą prostą reprezentują próbki z klasy 1, natomiast punkty leżące pod prostą L reprezentują klasę 2. Takich punktów na obu półpłaszczyznach znajduje się nieskończenie wiele i dlatego musimy wybrać po kilka próbek z każdej klasy. Chcemy, aby perceptron po nauczeniu dla próbek z klasy pierwszej na wyjściu podawał sygnał równy 1, natomiast dla próbek z klasy drugiej sygnał równy — 1. W ten sposób zbudowaliśmy ciąg uczący przedstawiony w tabeli 6.1. |} Przyjmujemy następujące wartości początkowe wag perceptronu: w i = 2, w 2 = 2, 0 = —4. Na podstawie tych parametrów oraz wcześniejszych informacji wykreślamy prostą K, która pokazuje podział przestrzeni (granica decyzyjna), jaki wyznacza perceptron przed rozpoczęciem procesu uczenia. Perceptron po dziesięciu epokach algorytmu uczenia (10 razy podawaliśmy na wejścia neuronu wszystkie elementy ciągu uczącego) zaczął poprawnie klasyfikować wektory ciągu uczącego. Wagi jego przyjęły następujące wartości: u;i = 4, w2 = 1, 9 — — 1, co odzwierciedla prosta M będąca granicą decyzyjną. Na rysunku 6.7 widzimy, że perceptron po nauczeniu poprawnie klasyfikuje próbki uczące, chociaż prosta M nie pokryła się z prostą wzorcową L.